// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>

struct data { long long x, y; };
std::vector<data> da;
int n;

long long c2(long long  n)
{
	return n * (n - 1) / 2;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n;
	da.resize(n);
	for (int i = 0; i < n; i++)
		std::cin >> da[i].x >> da[i].y;
	int count = 1;
	long long ans = 0;
	std::sort(da.begin(), da.end(), [](data const & a, data const & b) {
				return a.x < b.x || (a.x == b.x && a.y < b.y);
			});

	for (int i = 1; i < n; i++) {
		if (da[i].x == da[i - 1].x) count++;
		else {
			ans += c2(count);
			count = 1;
		}
	}
	ans += c2(count);

	std::sort(da.begin(), da.end(), [](data const & a, data const & b) {
				return a.y < b.y || (a.y == b.y && a.x < b.x);
			});
	count = 1;
	for (int i = 1; i < n; i++) {
		if (da[i].y == da[i - 1].y) count++;
		else {
			ans += c2(count);
			count = 1;
		}
	}
	ans += c2(count);

	count = 1;
	for (int i = 1; i < n; i++) {
		if (da[i].y == da[i - 1].y && da[i].x == da[i - 1].x) count++;
		else {
			ans -= c2(count);
			count = 1;
		}
	}
	ans -= c2(count);

	std::cout << ans << '\n';
}

